CREATE OR REPLACE FUNCTION get_clients_by_number_of_orders()
RETURNS TABLE (
    client_id INT,
    client_name TEXT,
    number_of_orders BIGINT
)
LANGUAGE plpgsql
AS $$
BEGIN
    RETURN QUERY
    SELECT
        c.client_id,
        c.name AS client_name,
        COUNT(DISTINCT o.order_num) AS number_of_orders
    FROM client c
    JOIN makes_order mo
        ON c.client_id = mo.client_id
    JOIN "order" o
        ON mo.order_num = o.order_num
    GROUP BY
        c.client_id,
        c.name
    ORDER BY
        number_of_orders DESC;
END;
$$;